﻿using System;
using System.IO;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using KL.Store.Web.Models;
using KL.Store.Data;
using CaptchaMvc.HtmlHelpers;
using CaptchaMvc.Attributes;
using KL.Store.Core;
using Microsoft.Practices.EnterpriseLibrary.Logging;
namespace KL.Store.Web.Controllers
{
    public class ContactUsController : KL.Store.Core.Web.BaseController
    {

        #region Index

        [RequireHttps]
        public ActionResult Index()
        {
            eStoreUser.RedirectUrl = "/ContactUs/Index";
            return View();
        }

        #endregion

        #region Get

        [Child]
        public ActionResult Get()
        {
            ContactUsModel cus = new ContactUsModel();
            cus.CityList = dbCity.GetList(1);
            return PartialView(cus);
        }

        #endregion

        #region GetForProduct

        [Child]
        public ActionResult GetForProduct(string productName)
        {
            ContactUsModel cus = new ContactUsModel();
            cus.CityList = dbCity.GetList(1);
            cus.Subject = productName + " Hakkında";
            return PartialView(cus);
        }

        #endregion

        #region Save

        [Child]
        [CaptchaVerify("Hatalı Kod")]
        public ActionResult Save(ContactUsModel cus)
        {
            var errors = ModelState.Values.SelectMany(v => v.Errors);
            cus.Country = 1;
            cus.CreateDate = DateTime.Now.ToString();
            if (ModelState.IsValid)
            {
                string Subject = cus.Name + " tarafından bir mesaj gönderildi: " + cus.Subject;
                string MessageBody = "";
                MessageBody += "Ad ve Soyadı: " + cus.Name + "<br />";
                MessageBody += "e-Posta Adresi: " + cus.Email + "<br />";
                MessageBody += "Telefon Numarası: " + cus.Phone + "<br />";
                MessageBody += "İl: " + Parameters.CityList.Where(i => i.CityId == cus.City).FirstOrDefault().CityName + "<br />";
                MessageBody += "Tarihi: " + cus.CreateDate + "<br />";
                MessageBody += "Gönderilen Departman: " + cus.Department + "<br /><br />";
                MessageBody += "Konu: " + cus.Subject + "<br />";
                MessageBody += "Mesajı: " + cus.Message + "<br />";

                string DepartmentMailAddress = "";
                switch (cus.Department)
                {
                    case "Yönetim": DepartmentMailAddress = Parameters.ContactManagementDepartmentAddress; break;
                    case "Muhasebe": DepartmentMailAddress = Parameters.ContactAccountingDepartmentAddress; break;
                    case "Satış": DepartmentMailAddress = Parameters.ContactSalesDepartmentAddress; break;
                    case "Müşteri Memnuniyeti": DepartmentMailAddress = Parameters.ContactCustomerSatisfactiontDepartmentAddress; break;
                    default: DepartmentMailAddress = Parameters.ContactManagementDepartmentAddress; break;
                }

                cus.Id = dbContactUs.Insert(eStoreUser.AccountId, cus.Name, cus.Email, cus.Phone, cus.Department, cus.Country, cus.City, cus.Subject, cus.Message);
                Utils.SendMail(DepartmentMailAddress, "", Parameters.ContactBCCAddress, Subject, MessageBody, true);

                //return Content(cus.Id.ToString() + " numaralı mesajınız iletilmiştir.");
                return Content("<p class='bg-primary bs-bg'><span class='glyphicon glyphicon-info-sign'></span>&nbsp;Gönderdiğiniz ileti en kısa zamanda değerlendirilip tarafınıza bilgi verilecektir, gösterdiğiniz ilgi için teşekkür ederiz.<br><br><a href='" + Parameters.WebSiteUrl + "' style='color:#FFFFFF; font-weight:bold;'>Alışverişe devam etmek için tıklayınız.</a></p>");
            }
            else
            {
                cus.CityList = dbCity.GetList(1);
                return PartialView("Get", cus);

            }
        }

        #endregion

        #region SaveForProduct

        [Child]
        [CaptchaVerify("Hatalı Kod")]
        public ActionResult SaveForProduct(ContactUsModel cus)
        {
            var errors = ModelState.Values.SelectMany(v => v.Errors);
            cus.Country = 1;
            cus.CreateDate = DateTime.Now.ToString();
            if (ModelState.IsValid)
            {
                string Subject = cus.Name + " tarafından bir soru soruldu: " + cus.Subject;
                string MessageBody = "";
                MessageBody += "Ad ve Soyadı: " + cus.Name + "<br />";
                MessageBody += "e-Posta Adresi: " + cus.Email + "<br />";
                MessageBody += "Telefon Numarası: " + cus.Phone + "<br />";
                MessageBody += "İl: " + Parameters.CityList.Where(i => i.CityId == cus.City).FirstOrDefault().CityName + "<br />";
                MessageBody += "Tarihi: " + cus.CreateDate + "<br /><br />";
                MessageBody += "Konu: " + cus.Subject + "<br />";
                MessageBody += "Mesajı: " + cus.Message + "<br />";

                string DepartmentMailAddress = Parameters.ContactAccountingDepartmentAddress;
                cus.Id = dbContactUs.Insert(eStoreUser.AccountId, cus.Name, cus.Email, cus.Phone, cus.Department, cus.Country, cus.City, cus.Subject, cus.Message);
                Utils.SendMail(DepartmentMailAddress, "", Parameters.ContactBCCAddress, Subject, MessageBody, true);
                //return Content(cus.Id.ToString() + " numaralı mesajınız iletilmiştir.");
                return Content("Gönderdiğiniz ileti en kısa zamanda değerlendirilip tarafınıza bilgi verilecektir, gösterdiğiniz ilgi için teşekkür ederiz.<br><br>");
            }
            else
            {
                cus.CityList = dbCity.GetList(1);
                return PartialView("GetForProduct", cus);

            }
        }

        #endregion

        #region Result

        [RequireHttps]
        [Child]
        public ActionResult Result(ContactUsModel cus)
        {
            return Content(cus.Id.ToString() + " numaralı mesajınız iletilmiştir.");
        }

        #endregion

        #region CV

        public ActionResult CVIndex()
        {
            CVModel CV = new CVModel();
            return View(CV);
        }

        [AllowAnonymous]
        [HttpPost]
        //[CaptchaVerify("Hatalı Kod")]
        public ActionResult CVIndex(CVModel CV, HttpPostedFileBase file = null)
        {
            if (!this.IsCaptchaVerify("Hatalı Doğrulama Kodu."))
            {
                ViewBag.Color = "danger";
                ViewBag.Result = "Hatalı Doğrulama Kodu.";
            }
            else if (string.IsNullOrEmpty(CV.FirstName) || string.IsNullOrEmpty(CV.LastName) || string.IsNullOrEmpty(CV.Phone) || string.IsNullOrEmpty(CV.EMail) || string.IsNullOrEmpty(CV.Information) || file == null)
            {
                ViewBag.Color = "danger";
                ViewBag.Result = "Lütfen tüm gerekli alanları doldurun ve CV dosyası seçin.";
            }
            else
            {
                string extension = Path.GetExtension(file.FileName).ToLower();
                if (extension != ".txt" && extension != ".pdf" && extension != ".doc" && extension != ".docx" && extension != ".ppt" && extension != ".pptx" && extension != ".xls" && extension != ".xlsx" && extension != ".jpg" && extension != ".jpeg" && extension != ".png" && extension != ".gif")
                {
                    ViewBag.Color = "danger";
                    ViewBag.Result = "Seçtiğiniz dosyanın uzantısı uygun değil.";
                }
                else
                {
                    string MessageBody = "Adı: " + CV.FirstName + "<br />";
                    MessageBody += "Soyadı: " + CV.LastName + "<br />";
                    MessageBody += "Telefon Numarası: " + CV.Phone + "<br />";
                    MessageBody += "E-Posta Adresi: " + CV.EMail + "<br />";
                    MessageBody += "Ön Yazı: " + CV.Information + "<br />";
                    MessageBody += "CV Dosyası Ektedir.";
                    string Subject = "Başvuru Formu: " + CV.FirstName + " " + CV.LastName;

                    try
                    {
                        Utils.SendMail(Parameters.CareerFormMailAddress, "", "", Subject, MessageBody, true, file);
                        ViewBag.Color = "success";
                        ViewBag.Result = "Başvuru bilgileriniz tarafımıza ulaşmıştır. En kısa sürede değerlendirilip dönüş yapılacaktır.";
                    }
                    catch (Exception ex)
                    {
                        Logger.Write(ex, "Exception");
                        ViewBag.Color = "danger";
                        ViewBag.Result = "Başvuru sırasında bir hata oluştu.";
                    }
                }
            }
            return View("CVIndex");
        }

        #endregion

    }
}
